package dao

import (
	"TTMS/model"
	"TTMS/utils"
	"net/http"
)

// AddSession 向数据库中添加 Session
func AddSession(sess *model.Session) error {
	//写 sql 语句
	sqlStr := "insert into sessions values (?,?,?)"
	//执行
	_, err := utils.DB.Exec(sqlStr, sess.SessionID, sess.Username, sess.UserID)
	if err != nil {
		return err
	}
	return nil
}

// DeleteSession 删除数据库中的 Session
func DeleteSession(sessID string) error {
	//写 sql 语句
	sqlStr := "delete from sessions where id=?"
	//执行
	_, err := utils.DB.Exec(sqlStr, sessID)
	if err != nil {
		return err
	}
	return nil
}

// IsLogin 判断用户是否已经登录 false 没有登录，true 登录
func IsLogin(r *http.Request) (*model.Session, bool) {
	//根据 Cookie 的 name 获取 Cookie
	cookie, _ := r.Cookie("user")
	session := &model.Session{}
	if cookie != nil {
		//获取 Cookie 的 Value
		cookieValue := cookie.Value
		//根据 cookieValue 去数据库中查询与之对应的 Session
		session = GetSessionByID(cookieValue)
		session.User = CheckUsername(session.Username)
		if session.UserID > 0 {
			//已经登录
			return session, true
		}
	}
	return nil, false
}

// GetSessionByID 根据 Session 的 ID 值从数据库中查询 Session
func GetSessionByID(sessID string) *model.Session {
	//写 sql 语句
	sqlStr := "select id, username, user_id from sessions where id=?"
	//执行
	row := utils.DB.QueryRow(sqlStr, sessID)
	//创建 Session
	session := &model.Session{}
	row.Scan(&session.SessionID, &session.Username, &session.UserID)
	return session
}
